package com.hxzy.controller.api;

import com.hxzy.common.vo.R;

import com.hxzy.service.system.ISysFileService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.log4j.Log4j2;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import java.util.HashMap;


@Log4j2
@Api(tags = "文件上传API")
@RestController
@RequestMapping(value = {"/api","/front"})
public class FileUploadLoadController {

    /** 字符常量：斜杠 {@code '/'} */
    public static final char SLASH = '/';

    /** 字符常量：反斜杠 {@code '\\'} */
    public static final char BACKSLASH = '\\';

    public static String FILENAME_PATTERN = "[a-zA-Z0-9_\\-\\|\\.\\u4e00-\\u9fa5]+";

    @Autowired
    private ISysFileService fastDfsSysFileServiceImpl;


    /**
     * 文件上传请求
     */
    @ApiOperation(value = "文件上传")
    @PostMapping("/upload")
    public R upload(MultipartFile file)
    {
        try
        {
            // 上传并返回访问地址
            String url = fastDfsSysFileServiceImpl.uploadFile(file);
            HashMap<String,String> data=new HashMap<>();
            data.put("name", getName(url)) ;
            data.put("url",url);
            return R.success(data);
        }
        catch (Exception e)
        {
            log.error("上传文件失败", e);
            return R.failed(e.getMessage());
        }
    }


    /**
     * 返回文件名
     *
     * @param filePath 文件
     * @return 文件名
     */
    public   String getName(String filePath)
    {
        if (null == filePath)
        {
            return null;
        }
        int len = filePath.length();
        if (0 == len)
        {
            return filePath;
        }
        if (isFileSeparator(filePath.charAt(len - 1)))
        {
            // 以分隔符结尾的去掉结尾分隔符
            len--;
        }

        int begin = 0;
        char c;
        for (int i = len - 1; i > -1; i--)
        {
            c = filePath.charAt(i);
            if (isFileSeparator(c))
            {
                // 查找最后一个路径分隔符（/或者\）
                begin = i + 1;
                break;
            }
        }

        return filePath.substring(begin, len);
    }

    /**
     * 是否为Windows或者Linux（Unix）文件分隔符<br>
     * Windows平台下分隔符为\，Linux（Unix）为/
     *
     * @param c 字符
     * @return 是否为Windows或者Linux（Unix）文件分隔符
     */
    public   boolean isFileSeparator(char c)
    {
        return SLASH == c || BACKSLASH == c;
    }

}
